
//配置路由的地方
import Vue from 'vue';
import VueRouter from 'vue-router';
import routes from './routes';

//引入store
import store from '@/store/index'


//使用插件
Vue.use(VueRouter)
//先把VueRouter原型对象的push,先保存一份
// let originPush = VueRouter.prototype.push;
// let originReplace = VueRouter.prototype.replace;
//重写push\replace
//第一个参数:告诉原来的push方法,往哪里跳转(传递那些参数)
// VueRouter.prototype.push = function (location, resolve, reject) {
//     if (resolve, reject) {
//         //call\apply区别,都可以调用函数一次,都可以篡改上下文
//         //不同点:call与apply传递参数:call传递参数用逗号隔开,apply方法执行\传递数组
//         originPush.call(this, location, resolve, reject)
//     } else {
//         originPush.call(this, () => { }, () => { })
//     }
// }
// VueRouter.prototype.reolace = function (loaction, resolve, reject) {
//     if (resolve && reject) {
//         originReplace.call(this, loaction, resolve, reject)
//     } else {
//         originReplace.call(this, loaction, () => { }, () => { })
//     }
// }

//配置路由
let router = new VueRouter({
    //配置路由
    routes,
    //滚动行为
    scrollBehavior(to, from, savedPosition) {
        // return 期望滚动到哪个的位置
        //y:0 表示最上方
        return { y: 0 }
    }
})

//全局守卫,前置守卫
router.beforeEach(async (to, from, next) => {
    //to可以获取到你要跳转到哪个路由的信息
    //from可以得到你从哪来的信息
    //next放行函数 next()放行 next(path)放行到指定路由  next(false)
    next();
    //用户登录了.才会有token,未登录就没有token
    let token = store.state.user.token;
    //用户信息
    let name = store.state.user.userInfo.name;

    //用户登录了
    if (token) {
        //用户登录了login就不能去login
        if (to.path == '/login') {
            next('/')
        } else {
            //登录
            //如果有用户名
            if (name) {
                next()
            } else {
                //没有用户信息,派发action获取用户信息
                //获取用户信息
                try {
                    await store.dispatch("getUserInfo")
                    next()
                } catch (error) {
                   //token失效了,重新登录
                   //清除token
                   await store.dispatch('userLogout')
                   next('/login')
                }

            }
        }
    } else {
        //未登录,不能去交易相关
        let toPath = to.path;
        if (toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay')!=-1 ||  toPath.indexOf('/center')!=-1 ||toPath.indexOf('/shopcart')!=-1) {
            
            next('/login?redirect='+toPath)
        }else{
            next() 
        }
        
    }



})

export default router;